﻿using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using STS.Model;
using System;

namespace STS.ViewModel
{
    public class WizytaViewModel : BaseViewModel
    {
        private ObservableCollection<Wizyta> _wizytaItems;
        public ObservableCollection<Wizyta> WizytaItems
        {
            get
            {
                if (_wizytaItems == null)
                {
                    _wizytaItems = new ObservableCollection<Wizyta>();
                }
                return _wizytaItems;
            }
            set
            {
                _wizytaItems = value;
                NotifyPropertyChanged("WizytaItems");
            }
        }

        public void FindWizytaItems()
        {
            var wizytaDB = from wizyta in ModelInstance.DataContext.WizytaItems
                         select wizyta;
            WizytaItems = new ObservableCollection<Wizyta>(wizytaDB);
            Debug.WriteLine("Znalazłem wizyty, size = " + WizytaItems.Count);
        }

        public Wizyta FindWizytaByIdWizyta(int wizytaId)
        {
            var wizytaDB = from wizyta in ModelInstance.DataContext.WizytaItems
                        where wizyta.IdWizyty == wizytaId
                        select wizyta;
            return wizytaDB.SingleOrDefault<Wizyta>();
        }

        public void UpdateWizyta(Wizyta updateWizyta)
        {
            Wizyta old = FindWizytaByIdWizyta(updateWizyta.IdWizyty);
            SetEntityPropertities(ref old, updateWizyta);
            SaveChangesToDB();
        }

        public void AddWizyta(Wizyta wizyta)
        {
            ModelInstance.DataContext.WizytaItems.InsertOnSubmit(wizyta);
            SaveChangesToDB();
            WizytaItems.Add(wizyta);
        }

        public void RemoveWizyta(Wizyta wizyta)
        {
            WizytaItems.Remove(wizyta);
            ModelInstance.DataContext.WizytaItems.DeleteOnSubmit(wizyta);
            SaveChangesToDB();
        }

        public void RemoveAllWizyta()
        {
            var wizytyDB = from wizyta in ModelInstance.DataContext.WizytaItems
                           select wizyta;

            foreach (Wizyta _wizyta in wizytyDB)
            {
                ModelInstance.DataContext.WizytaItems.DeleteOnSubmit(_wizyta);
            }

            try
            {
                SaveChangesToDB();
                WizytaItems.Clear();
            }
            catch (Exception e)
            {
                Debug.WriteLine(e);
            }
        }

    }
}
